| package |
package := Package name: 'paquetefeliz'.
package paxVersion: 1;
	basicComment: ''.


package classNames
	add: #A;
	add: #Apurado;
	add: #Claustrofobico;
	add: #Fiaca;
	add: #Micro;
	add: #Moderado;
	add: #Obsecuente;
	add: #Persona;
	yourself.

package binaryGlobalNames: (Set new
	yourself).

package globalAliases: (Set new
	yourself).

package setPrerequisites: (IdentitySet new
	add: 'UTN\paradigmas\objetos\dolphin smalltalk\Object Arts\Dolphin\Base\Dolphin';
	yourself).

package!

"Class Definitions"!

Object subclass: #A
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	classInstanceVariableNames: ''!
A subclass: #Apurado
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	classInstanceVariableNames: ''!
A subclass: #Claustrofobico
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	classInstanceVariableNames: ''!
A subclass: #Fiaca
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	classInstanceVariableNames: ''!
A subclass: #Micro
	instanceVariableNames: 'parados sentados metros2 LugaresOcupados LugaresLibres primerpersona'
	classVariableNames: ''
	poolDictionaries: ''
	classInstanceVariableNames: ''!
A subclass: #Moderado
	instanceVariableNames: 'factor'
	classVariableNames: ''
	poolDictionaries: ''
	classInstanceVariableNames: ''!
A subclass: #Obsecuente
	instanceVariableNames: 'sujefe'
	classVariableNames: ''
	poolDictionaries: ''
	classInstanceVariableNames: ''!
A subclass: #Persona
	instanceVariableNames: 'ubicacion tipo pocision'
	classVariableNames: ''
	poolDictionaries: ''
	classInstanceVariableNames: ''!

"Global Aliases"!


"Loose Methods"!

"End of package definition"!

"Source Globals"!

"Classes"!

A guid: (GUID fromString: '{F36DB6BC-65E6-4239-8E0A-6966D47901B7}')!
A comment: ''!
!A categoriesForClass!Unclassified! !
Apurado guid: (GUID fromString: '{D65F4CC6-D626-48C1-9F29-50FE9EDB0022}')!
Apurado comment: ''!
!Apurado categoriesForClass!Unclassified! !
!Apurado methodsFor!

acepta:micro
"en este caso el apurado se sube siempre..por defecto siempre acepta subirse a cualquier micro"
^true.! !
!Apurado categoriesFor: #acepta:!public! !

Claustrofobico guid: (GUID fromString: '{68055736-C1EF-43CE-BC92-E70A4CB18B5B}')!
Claustrofobico comment: ''!
!Claustrofobico categoriesForClass!Unclassified! !
!Claustrofobico methodsFor!

acepta:micro
^((micro metros2)>160)! !
!Claustrofobico categoriesFor: #acepta:!public! !

Fiaca guid: (GUID fromString: '{AD7CA9C1-D446-4569-BE23-347DEE50024F}')!
Fiaca comment: ''!
!Fiaca categoriesForClass!Unclassified! !
!Fiaca methodsFor!

acepta:micro
^((micro LugaresDisponiblesSentados >0))! !
!Fiaca categoriesFor: #acepta:!public! !

Micro guid: (GUID fromString: '{FBDDF00B-0B95-4819-972F-1D32FF277355}')!
Micro comment: ''!
!Micro categoriesForClass!Unclassified! !
!Micro methodsFor!

AlterarLugares:persona 
 ((self  LugaresOcupados)=0 ) ifTrue: [self primerpersona:persona  ].
                                                   ((self restarLugarlibre )).
                                                   (self sumarLugarocupado ). !

error
^'la persona no cumple las condiciones para subirse al micro'!

generarbajada:persona
 ((self sumarlugarlibre )) .
  (self  restarLugarOcupado ).   
  ( (persona pocision)='sentado') ifFalse: [(self  SumarEspacioPersonaParada )] ifTrue: [self SumarEspacioPersonaSentada].!

haylugar
^( LugaresLibres~= 0)

!

inicializacionrapida
sentados:=0.
parados:=0.
LugaresLibres:=0.
LugaresOcupados:=0.
metros2:=0.
!

InicializoEspacioParados:cantidad
parados:=cantidad.

!

InicializoEspacioSentados:cantidad
sentados:=cantidad.


!

InicializoEspaciosLibres
LugaresOcupados:=0.
LugaresLibres:=(parados+sentados).!

LugaresDisponiblesParados
	"Answer the value of the receiver's 'parados' instance variable."

	^parados!

LugaresDisponiblesSentados
	"Answer the value of the receiver's 'sentados' instance variable."

	^sentados!

LugaresLibres
^LugaresLibres!

LugaresOcupados
^LugaresOcupados!

metros2
	"Answer the value of the receiver's 'metros2' instance variable."

	^metros2!

metros2:metros
metros2:=metros.!

primerpersona
^primerpersona!

primerpersona:p
primerpersona:=p!

puedesubirse:persona
^((persona acepta:self)&(self haylugar )&((persona enquemicro)=nil ))!

RestarEspacioPersonaParada
parados:=(parados-1)!

RestarEspacioPersonaSentada
sentados:=(sentados-1)!

restarLugarlibre
LugaresLibres:=(LugaresLibres-1)!

restarLugarOcupado
LugaresOcupados:=(LugaresOcupados-1)!

SumarEspacioPersonaParada
parados:=(parados+1)!

SumarEspacioPersonaSentada
sentados:=sentados+1!

sumarlugarlibre
LugaresLibres:=(LugaresLibres+1)!

sumarLugarocupado
LugaresOcupados:=(LugaresOcupados+1)! !
!Micro categoriesFor: #AlterarLugares:!public! !
!Micro categoriesFor: #error!public! !
!Micro categoriesFor: #generarbajada:!public! !
!Micro categoriesFor: #haylugar!public! !
!Micro categoriesFor: #inicializacionrapida!public! !
!Micro categoriesFor: #InicializoEspacioParados:!public! !
!Micro categoriesFor: #InicializoEspacioSentados:!public! !
!Micro categoriesFor: #InicializoEspaciosLibres!public! !
!Micro categoriesFor: #LugaresDisponiblesParados!accessing!public! !
!Micro categoriesFor: #LugaresDisponiblesSentados!accessing!public! !
!Micro categoriesFor: #LugaresLibres!public! !
!Micro categoriesFor: #LugaresOcupados!public! !
!Micro categoriesFor: #metros2!accessing!public! !
!Micro categoriesFor: #metros2:!public! !
!Micro categoriesFor: #primerpersona!public! !
!Micro categoriesFor: #primerpersona:!public! !
!Micro categoriesFor: #puedesubirse:!public! !
!Micro categoriesFor: #RestarEspacioPersonaParada!public! !
!Micro categoriesFor: #RestarEspacioPersonaSentada!public! !
!Micro categoriesFor: #restarLugarlibre!public! !
!Micro categoriesFor: #restarLugarOcupado!public! !
!Micro categoriesFor: #SumarEspacioPersonaParada!public! !
!Micro categoriesFor: #SumarEspacioPersonaSentada!public! !
!Micro categoriesFor: #sumarlugarlibre!public! !
!Micro categoriesFor: #sumarLugarocupado!public! !

Moderado guid: (GUID fromString: '{E65C5D6C-AB13-418F-9CD4-4AB7036E6235}')!
Moderado comment: ''!
!Moderado categoriesForClass!Unclassified! !
!Moderado methodsFor!

acepta:micro
^(micro LugaresLibres >=(factor))!

moderacion:valor
factor:=valor.! !
!Moderado categoriesFor: #acepta:!public! !
!Moderado categoriesFor: #moderacion:!public! !

Obsecuente guid: (GUID fromString: '{ACA78A42-1179-4B8A-87C7-F1D615EDA8EB}')!
Obsecuente comment: ''!
!Obsecuente categoriesForClass!Unclassified! !
!Obsecuente methodsFor!

acepta:micro
^((self jefe) acepta:micro)!

jefe
^sujefe!

sujefees:persona
sujefe:=persona.! !
!Obsecuente categoriesFor: #acepta:!public! !
!Obsecuente categoriesFor: #jefe!public! !
!Obsecuente categoriesFor: #sujefees:!public! !

Persona guid: (GUID fromString: '{7E962CB7-3A21-448D-9BF1-7A5A4385412F}')!
Persona comment: ''!
!Persona categoriesForClass!Unclassified! !
!Persona methodsFor!

acepta:micro
^((self tipo) acepta:micro )!

bajarsedelmicro
	self enquemicro LugaresOcupados = 0 
		ifFalse: 
			[ubicacion := nil.
			self enquemicro generarbajada: self]
		ifTrue: 
			[self enquemicro primerpersona: nil.
			^self error]!

enquemicro
^ubicacion!

enquemicro:m
ubicacion:=m!

error
^'el micro esta vacio'!

EsEmpleadoDe:persona
tipo sujefees: persona !

inicializacionrapida
ubicacion:=nil.
tipo:=nil.
pocision:=nil.
!

pocision
^pocision!

subirse:micro
(micro puedesubirse: self ) ifFalse: [^(micro error)] ifTrue: [ (((micro LugaresDisponiblesSentados )>0)) ifTrue: [(micro RestarEspacioPersonaSentada  ).
                                              (self enquemicro:micro).
                                              micro AlterarLugares:  self.
                                                  ( pocision:='sentado'). ]].

(((micro LugaresDisponiblesParados )>0)&(self pocision =nil)) ifTrue: [(micro RestarEspacioPersonaParada) .
                                              (self enquemicro: micro).
                                             micro AlterarLugares:self.    
                                                        (pocision:='parado'). ]
                                                                                                 
!

sumoderacionsoporta:x
self tipo moderacion: x.!

tipo
^tipo!

tipo:persona
tipo:=persona! !
!Persona categoriesFor: #acepta:!public! !
!Persona categoriesFor: #bajarsedelmicro!public! !
!Persona categoriesFor: #enquemicro!public! !
!Persona categoriesFor: #enquemicro:!public! !
!Persona categoriesFor: #error!public! !
!Persona categoriesFor: #EsEmpleadoDe:!public! !
!Persona categoriesFor: #inicializacionrapida!public! !
!Persona categoriesFor: #pocision!public! !
!Persona categoriesFor: #subirse:!public! !
!Persona categoriesFor: #sumoderacionsoporta:!public! !
!Persona categoriesFor: #tipo!public! !
!Persona categoriesFor: #tipo:!public! !

"Binary Globals"!

